#include<iostream>
#include<string>
using namespace std;

// 下面三个同名的compare函数构成函数重载：
// 函数名相同，参数列表不同，在同一个作用域下
bool compare(int a,int b)
{
    cout << "compare_int_int" << endl;
    return a > b;
}

bool compare(double a,double b)
{
    cout << "compare_double_double" << endl;
    return a > b;
}

bool compare(char* a,char* b)
{
    cout << "compare_char*_char*" << endl;
    return strcmp(a, b);
}

// data存储在全局变量
int data = 10;

int main()
{
    // 在局部作用域下定义compare，后面调用三个compare就会默认使用该局部作用域下的声明，
    // 类型不匹配就会使用强制类型转化，类型转化不了就报错
    // 所以要在同一作用域下才会构成函数重载
    // bool compare(int a, int b);

    compare(10, 20);
    compare(10.0, 20.0);
    compare("aaa", "bbb");

    // data和全局变量data是可以重名的，因为作用域不同
    int data = 20;
    cout << data << endl;//20，优先使用该作用域下的值
    cout << ::data << endl;//10，::函数作用域，使用全局变量的data
    return 0;
}